<?php


namespace app\controller;

//
//use app\model\One;
//
////依赖注入：即允许通过类的方法床底对象的能力，并且限制了对象的类型
////而传递的对象背后的那个类被自动绑定并且实例化，这就是依赖注入
//class Inject
//{
// protected $one;
// public function __construct(One $one)  //依赖注入
// {
//     $this->one = $one;
// }
//public function index(){
//     return $this->one->name;
//}
//}

//bind 绑定类库的标识  这个标识具有唯一性
//app 快速调用，并且自动实例化对象1，标识严格保持一致包括大小写
//自动化实例化对象的方式，是采用单例模式模式  APP（‘one’，true） 重新实例化
//use app\Common\Text;

use app\Common\facade\Text;
use think\Controller;
use think\Exception;
use think\exception\HttpException;
use think\facade\Env;
use think\facade\Hook;

use think\Request;
class Inject extends Controller {
    //控制器中间件
    protected $middleware = ['Auth'];
//    protected $middleware = [
//        'Auth'=>['only',['index','text']],
//        'Check'=>['except',['bhv','read']]
//    ];
    public function index(Request $request){
        bind('one','app\model\One');
//        bind([
//           'one'=> 'app\model\One'
//        ]);
        return app('one')->name.'+'.$request->dddd;
    }
    public function text(){
//        $text = new Text();
//        return $text->hello('world!');

        return Text::hello('Mr.ghj');
    }
    public function bhv(){
  Hook::listen('eat','吃饭');
    }
    public function write($id){
        return 'write id:'.$id;
    }
    public function Err(){
        //默认情况下，对所有 PHP 的错误都会抛出异常信息，可以用错误级别关闭；
       // error_reporting(0);
       // echo 0/0;  //错误
        echo Env::get('think_path');

        //系统的异常抛出是自动进行的，并不需要你手动抛出，但也支持手动；
        //throw new Exception('异常消息', 10086);
       // throw new Exception('异常消息', 10086);


        //我们可以抛出HTTP异常，所谓HTTP异常比如404，500错误
//        throw new HttpException(404,'页面不存在');
        //abort(404,'页面不存在');
    }
}